import axios from 'axios';
import dotenv from 'dotenv';
import path from 'path';
import { fileURLToPath } from 'url';
import https from 'https';

// 获取当前文件的目录
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

// 加载环境变量（先尝试加载后端.env，再尝试加载前端.env）
dotenv.config({ path: path.resolve(__dirname, '../../.env') });
dotenv.config({ path: path.resolve(__dirname, '../../../client/.env') });

class QwenService {
    constructor() {
        this.baseURL = 'https://dashscope.aliyuncs.com/api/v1';
        const apiKey = process.env.VITE_APP_QWEN_API_KEY;
        
        console.log('=== 通义千问服务初始化 ===');
        console.log('API Key:', apiKey ? `${apiKey.substring(0, 8)}...` : '未设置');
        
        if (!apiKey) {
            throw new Error('通义千问API密钥未配置，请在.env文件中设置VITE_APP_QWEN_API_KEY');
        }

        // 创建axios实例，禁用代理
        this.client = axios.create({
            baseURL: this.baseURL,
            headers: {
                'Authorization': `Bearer ${apiKey}`,
                'Content-Type': 'application/json'
            },
            proxy: false, // 禁用代理
            httpsAgent: new https.Agent({
                rejectUnauthorized: true, // 验证SSL证书
                timeout: 60000 // 60秒超时
            }),
            timeout: 60000 // 请求超时时间
        });

        // 添加响应拦截器，统一处理错误
        this.client.interceptors.response.use(
            response => response,
            error => {
                console.error('=== 通义千问请求失败 ===');
                console.error('请求配置:', {
                    url: error.config?.url,
                    method: error.config?.method,
                    headers: {
                        ...error.config?.headers,
                        Authorization: '已隐藏'
                    }
                });
                console.error('错误详情:', {
                    message: error.message,
                    status: error.response?.status,
                    statusText: error.response?.statusText,
                    data: error.response?.data
                });
                return Promise.reject(error);
            }
        );
    }

    /**
     * 发送消息到通义千问API
     * @param {Object} params - 请求参数
     * @param {string} params.model - 模型名称
     * @param {Array} params.messages - 消息历史
     * @returns {Promise} API响应
     */
    async chat(params) {
        try {
            if (!params.messages || !Array.isArray(params.messages)) {
                throw new Error('无效的消息格式：messages 必须是数组');
            }

            console.log('=== 通义千问请求详情 ===');
            console.log('请求体:', {
                model: params.model,
                input: {
                    messages: params.messages.map(msg => ({
                        role: msg.role,
                        content: msg.content.substring(0, 50) + '...' // 只打印前50个字符
                    }))
                }
            });

            const response = await this.client.post(
                '/services/aigc/text-generation/generation',
                {
                    model: params.model || 'qwen-plus',
                    input: {
                        messages: params.messages
                    }
                }
            );

            if (!response.data) {
                throw new Error('API响应为空');
            }

            if (!response.data.output?.text) {
                throw new Error('API响应格式错误：' + JSON.stringify(response.data));
            }

            console.log('=== 通义千问响应成功 ===');
            console.log('响应文本:', response.data.output.text.substring(0, 100) + '...');

            return {
                success: true,
                result: response.data.output.text
            };
        } catch (error) {
            console.error('=== 通义千问错误详情 ===');
            console.error('错误类型:', error.constructor.name);
            console.error('错误信息:', error.message);
            if (error.response) {
                console.error('响应状态:', error.response.status);
                console.error('响应数据:', error.response.data);
            }
            if (error.request) {
                console.error('请求详情:', {
                    method: error.request.method,
                    path: error.request.path,
                    headers: {
                        ...error.request.getHeaders(),
                        Authorization: '已隐藏'
                    }
                });
            }
            
            throw {
                success: false,
                message: error.response?.data?.message || error.message,
                error: error.response?.data || error,
                type: error.constructor.name
            };
        }
    }
}

// 创建服务实例
const qwenService = new QwenService();
export default qwenService;